home *** CD-ROM | disk | FTP | other *** search
/ Software of the Month Club 2000 October / Software of the Month - Ultimate Collection Shareware 277.iso / pc / PROGRAMS / UTILITY / WINLINUX / DATA1.CAB / programs_-_include / LINUX / CYCLADES.H < prev    next >
C/C++ Source or Header  |  1999-09-17  |  26KB  |  793 lines

  1. /* $Revision: 2.6 $$Date: 1998/08/10 16:57:01 $
  2.  * linux/include/linux/cyclades.h
  3.  *
  4.  * This file is maintained by Ivan Passos <ivan@cyclades.com>, 
  5.  * Marcio Saito <marcio@cyclades.com> and
  6.  * Randolph Bentson <bentson@grieg.seaslug.org>.
  7.  *
  8.  * This file contains the general definitions for the cyclades.c driver
  9.  *$Log: cyclades.h,v $
  10.  *Revision 2.5  1998/08/03 16:57:01  ivan
  11.  *added cyclades_idle_stats structure;
  12.  * 
  13.  *Revision 2.4  1998/06/01 12:09:53  ivan
  14.  *removed closing_wait2 from cyclades_port structure;
  15.  *
  16.  *Revision 2.3  1998/03/16 18:01:12  ivan
  17.  *changes in the cyclades_port structure to get it closer to the 
  18.  *standard serial port structure;
  19.  *added constants for new ioctls;
  20.  *
  21.  *Revision 2.2  1998/02/17 16:50:00  ivan
  22.  *changes in the cyclades_port structure (addition of shutdown_wait and 
  23.  *chip_rev variables);
  24.  *added constants for new ioctls and for CD1400 rev. numbers.
  25.  *
  26.  *Revision 2.1    1997/10/24 16:03:00  ivan
  27.  *added rflow (which allows enabling the CD1400 special flow control 
  28.  *feature) and rtsdtr_inv (which allows DTR/RTS pin inversion) to 
  29.  *cyclades_port structure;
  30.  *added Alpha support
  31.  *
  32.  *Revision 2.0  1997/06/30 10:30:00  ivan
  33.  *added some new doorbell command constants related to IOCTLW and
  34.  *UART error signaling
  35.  *
  36.  *Revision 1.8  1997/06/03 15:30:00  ivan
  37.  *added constant ZFIRM_HLT
  38.  *added constant CyPCI_Ze_win ( = 2 * Cy_PCI_Zwin)
  39.  *
  40.  *Revision 1.7  1997/03/26 10:30:00  daniel
  41.  *new entries at the end of cyclades_port struct to reallocate
  42.  *variables illegally allocated within card memory.
  43.  *
  44.  *Revision 1.6  1996/09/09 18:35:30  bentson
  45.  *fold in changes for Cyclom-Z -- including structures for
  46.  *communicating with board as well modest changes to original
  47.  *structures to support new features.
  48.  *
  49.  *Revision 1.5  1995/11/13 21:13:31  bentson
  50.  *changes suggested by Michael Chastain <mec@duracef.shout.net>
  51.  *to support use of this file in non-kernel applications
  52.  *
  53.  *
  54.  */
  55.  
  56. #ifndef _LINUX_CYCLADES_H
  57. #define _LINUX_CYCLADES_H
  58.  
  59. struct cyclades_monitor {
  60.         unsigned long           int_count;
  61.         unsigned long           char_count;
  62.         unsigned long           char_max;
  63.         unsigned long           char_last;
  64. };
  65.  
  66. /*
  67.  * These stats all reflect activity since the device was last initialized.
  68.  * (i.e., since the port was opened with no other processes already having it
  69.  * open)
  70.  */
  71. struct cyclades_idle_stats {
  72.     time_t       in_use;    /* Time device has been in use (secs) */
  73.     time_t       recv_idle;    /* Time since last char received (secs) */
  74.     time_t       xmit_idle;    /* Time since last char transmitted (secs) */
  75.     unsigned long  recv_bytes;    /* Bytes received */
  76.     unsigned long  xmit_bytes;    /* Bytes transmitted */
  77.     unsigned long  overruns;    /* Input overruns */
  78.     unsigned long  frame_errs;    /* Input framing errors */
  79.     unsigned long  parity_errs;    /* Input parity errors */
  80. };
  81.  
  82. #define CYCLADES_MAGIC  0x4359
  83.  
  84. #define CYGETMON                0x435901
  85. #define CYGETTHRESH             0x435902
  86. #define CYSETTHRESH             0x435903
  87. #define CYGETDEFTHRESH          0x435904
  88. #define CYSETDEFTHRESH          0x435905
  89. #define CYGETTIMEOUT            0x435906
  90. #define CYSETTIMEOUT            0x435907
  91. #define CYGETDEFTIMEOUT         0x435908
  92. #define CYSETDEFTIMEOUT         0x435909
  93. #define CYSETRFLOW        0x43590a
  94. #define CYGETRFLOW        0x43590b
  95. #define CYSETRTSDTR_INV        0x43590c
  96. #define CYGETRTSDTR_INV        0x43590d
  97. #define CYZSETPOLLCYCLE        0x43590e
  98. #define CYZGETPOLLCYCLE        0x43590f
  99. #define CYGETCD1400VER        0x435910
  100. #define CYGETCARDINFO        0x435911
  101. #define    CYSETWAIT        0x435912
  102. #define    CYGETWAIT        0x435913
  103.  
  104. /*************** CYCLOM-Z ADDITIONS ***************/
  105.  
  106. #define CZIOC           ('M' << 8)
  107. #define CZ_NBOARDS      (CZIOC|0xfa)
  108. #define CZ_BOOT_START   (CZIOC|0xfb)
  109. #define CZ_BOOT_DATA    (CZIOC|0xfc)
  110. #define CZ_BOOT_END     (CZIOC|0xfd)
  111. #define CZ_TEST         (CZIOC|0xfe)
  112.  
  113. #define CZ_DEF_POLL    (HZ/25)
  114.  
  115. #define MAX_BOARD       4       /* Max number of boards */
  116. #define MAX_DEV         256     /* Max number of ports total */
  117. #define    CYZ_MAX_SPEED    921600
  118.  
  119. #define    CYZ_FIFO_SIZE    16
  120.  
  121. #define CYZ_BOOT_NWORDS 0x100
  122. struct CYZ_BOOT_CTRL {
  123.         unsigned short  nboard;
  124.         int             status[MAX_BOARD];
  125.         int             nchannel[MAX_BOARD];
  126.         int             fw_rev[MAX_BOARD];
  127.         unsigned long   offset;
  128.         unsigned long   data[CYZ_BOOT_NWORDS];
  129. };
  130.  
  131.  
  132. #ifndef DP_WINDOW_SIZE
  133. /* #include "cyclomz.h" */
  134. /****************** ****************** *******************/
  135. /*
  136.  *    The data types defined below are used in all ZFIRM interface
  137.  *    data structures. They accomodate differences between HW
  138.  *    architectures and compilers.
  139.  */
  140.  
  141. #if defined(__alpha__)
  142. typedef unsigned long    ucdouble;    /* 64 bits, unsigned */
  143. typedef unsigned int    uclong;        /* 32 bits, unsigned */
  144. #else
  145. typedef unsigned long    uclong;        /* 32 bits, unsigned */
  146. #endif
  147. typedef unsigned short    ucshort;    /* 16 bits, unsigned */
  148. typedef unsigned char    ucchar;        /* 8 bits, unsigned */
  149.  
  150. /*
  151.  *    Memory Window Sizes
  152.  */
  153.  
  154. #define    DP_WINDOW_SIZE        (0x00080000)    /* window size 512 Kb */
  155. #define    ZE_DP_WINDOW_SIZE    (0x00100000)    /* window size 1 Mb (Ze and
  156.                           8Zo V.2 */
  157. #define    CTRL_WINDOW_SIZE    (0x00000080)    /* runtime regs 128 bytes */
  158.  
  159. /*
  160.  *    CUSTOM_REG - Cyclom-Z/PCI Custom Registers Set. The driver
  161.  *    normally will access only interested on the fpga_id, fpga_version,
  162.  *    start_cpu and stop_cpu.
  163.  */
  164.  
  165. struct    CUSTOM_REG {
  166.     uclong    fpga_id;        /* FPGA Identification Register */
  167.     uclong    fpga_version;        /* FPGA Version Number Register */
  168.     uclong    cpu_start;        /* CPU start Register (write) */
  169.     uclong    cpu_stop;        /* CPU stop Register (write) */
  170.     uclong    misc_reg;        /* Miscelaneous Register */
  171.     uclong    idt_mode;        /* IDT mode Register */
  172.     uclong    uart_irq_status;    /* UART IRQ status Register */
  173.     uclong    clear_timer0_irq;    /* Clear timer interrupt Register */
  174.     uclong    clear_timer1_irq;    /* Clear timer interrupt Register */
  175.     uclong    clear_timer2_irq;    /* Clear timer interrupt Register */
  176.     uclong    test_register;        /* Test Register */
  177.     uclong    test_count;        /* Test Count Register */
  178.     uclong    timer_select;        /* Timer select register */
  179.     uclong    pr_uart_irq_status;    /* Prioritized UART IRQ stat Reg */
  180.     uclong    ram_wait_state;        /* RAM wait-state Register */
  181.     uclong    uart_wait_state;    /* UART wait-state Register */
  182.     uclong    timer_wait_state;    /* timer wait-state Register */
  183.     uclong    ack_wait_state;        /* ACK wait State Register */
  184. };
  185.  
  186. /*
  187.  *    RUNTIME_9060 - PLX PCI9060ES local configuration and shared runtime
  188.  *    registers. This structure can be used to access the 9060 registers
  189.  *    (memory mapped).
  190.  */
  191.  
  192. struct RUNTIME_9060 {
  193.     uclong    loc_addr_range;    /* 00h - Local Address Range */
  194.     uclong    loc_addr_base;    /* 04h - Local Address Base */
  195.     uclong    loc_arbitr;    /* 08h - Local Arbitration */
  196.     uclong    endian_descr;    /* 0Ch - Big/Little Endian Descriptor */
  197.     uclong    loc_rom_range;    /* 10h - Local ROM Range */
  198.     uclong    loc_rom_base;    /* 14h - Local ROM Base */
  199.     uclong    loc_bus_descr;    /* 18h - Local Bus descriptor */
  200.     uclong    loc_range_mst;    /* 1Ch - Local Range for Master to PCI */
  201.     uclong    loc_base_mst;    /* 20h - Local Base for Master PCI */
  202.     uclong    loc_range_io;    /* 24h - Local Range for Master IO */
  203.     uclong    pci_base_mst;    /* 28h - PCI Base for Master PCI */
  204.     uclong    pci_conf_io;    /* 2Ch - PCI configuration for Master IO */
  205.     uclong    filler1;    /* 30h */
  206.     uclong    filler2;    /* 34h */
  207.     uclong    filler3;    /* 38h */
  208.     uclong    filler4;    /* 3Ch */
  209.     uclong    mail_box_0;    /* 40h - Mail Box 0 */
  210.     uclong    mail_box_1;    /* 44h - Mail Box 1 */
  211.     uclong    mail_box_2;    /* 48h - Mail Box 2 */
  212.     uclong    mail_box_3;    /* 4Ch - Mail Box 3 */
  213.     uclong    filler5;    /* 50h */
  214.     uclong    filler6;    /* 54h */
  215.     uclong    filler7;    /* 58h */
  216.     uclong    filler8;    /* 5Ch */
  217.     uclong    pci_doorbell;    /* 60h - PCI to Local Doorbell */
  218.     uclong    loc_doorbell;    /* 64h - Local to PCI Doorbell */
  219.     uclong    intr_ctrl_stat;    /* 68h - Interrupt Control/Status */
  220.     uclong    init_ctrl;    /* 6Ch - EEPROM control, Init Control, etc */
  221. };
  222.  
  223. /* Values for the Local Base Address re-map register */
  224.  
  225. #define    WIN_RAM        0x00000001L    /* set the sliding window to RAM */
  226. #define    WIN_CREG    0x14000001L    /* set the window to custom Registers */
  227.  
  228. /* Values timer select registers */
  229.  
  230. #define    TIMER_BY_1M    0x00        /* clock divided by 1M */
  231. #define    TIMER_BY_256K    0x01        /* clock divided by 256k */
  232. #define    TIMER_BY_128K    0x02        /* clock divided by 128k */
  233. #define    TIMER_BY_32K    0x03        /* clock divided by 32k */
  234.  
  235. /****************** ****************** *******************/
  236. #endif
  237.  
  238. #ifndef ZFIRM_ID
  239. /* #include "zfwint.h" */
  240. /****************** ****************** *******************/
  241. /*
  242.  *    This file contains the definitions for interfacing with the
  243.  *    Cyclom-Z ZFIRM Firmware.
  244.  */
  245.  
  246. /* General Constant definitions */
  247.  
  248. #define    MAX_CHAN    64        /* max number of channels per board */
  249.  
  250. /* firmware id structure (set after boot) */
  251.  
  252. #define ID_ADDRESS    0x00000180L    /* signature/pointer address */
  253. #define    ZFIRM_ID    0x5557465AL    /* ZFIRM/U signature */
  254. #define    ZFIRM_HLT    0x59505B5CL    /* ZFIRM needs external power supply */
  255. #define    ZFIRM_RST    0x56040674L    /* RST signal (due to FW reset) */
  256.  
  257. #define    ZF_TINACT_DEF    1000        /* default inactivity timeout 
  258.                        (1000 ms) */
  259. #define    ZF_TINACT    ZF_TINACT_DEF
  260.  
  261. struct    FIRM_ID {
  262.     uclong    signature;        /* ZFIRM/U signature */
  263.     uclong    zfwctrl_addr;        /* pointer to ZFW_CTRL structure */
  264. };
  265.  
  266. /* Op. System id */
  267.  
  268. #define    C_OS_LINUX    0x00000030    /* generic Linux system */
  269.  
  270. /* channel op_mode */
  271.  
  272. #define    C_CH_DISABLE    0x00000000    /* channel is disabled */
  273. #define    C_CH_TXENABLE    0x00000001    /* channel Tx enabled */
  274. #define    C_CH_RXENABLE    0x00000002    /* channel Rx enabled */
  275. #define    C_CH_ENABLE    0x00000003    /* channel Tx/Rx enabled */
  276. #define    C_CH_LOOPBACK    0x00000004    /* Loopback mode */
  277.  
  278. /* comm_parity - parity */
  279.  
  280. #define    C_PR_NONE    0x00000000    /* None */
  281. #define    C_PR_ODD    0x00000001    /* Odd */
  282. #define C_PR_EVEN    0x00000002    /* Even */
  283. #define C_PR_MARK    0x00000004    /* Mark */
  284. #define C_PR_SPACE    0x00000008    /* Space */
  285. #define C_PR_PARITY    0x000000ff
  286.  
  287. #define    C_PR_DISCARD    0x00000100    /* discard char with frame/par error */
  288. #define C_PR_IGNORE    0x00000200    /* ignore frame/par error */
  289.  
  290. /* comm_data_l - data length and stop bits */
  291.  
  292. #define C_DL_CS5    0x00000001
  293. #define C_DL_CS6    0x00000002
  294. #define C_DL_CS7    0x00000004
  295. #define C_DL_CS8    0x00000008
  296. #define    C_DL_CS        0x0000000f
  297. #define C_DL_1STOP    0x00000010
  298. #define C_DL_15STOP    0x00000020
  299. #define C_DL_2STOP    0x00000040
  300. #define    C_DL_STOP    0x000000f0
  301.  
  302. /* interrupt enabling/status */
  303.  
  304. #define    C_IN_DISABLE    0x00000000    /* zero, disable interrupts */
  305. #define    C_IN_TXBEMPTY    0x00000001    /* tx buffer empty */
  306. #define    C_IN_TXLOWWM    0x00000002    /* tx buffer below LWM */
  307. #define    C_IN_RXHIWM    0x00000010    /* rx buffer above HWM */
  308. #define    C_IN_RXNNDT    0x00000020    /* rx no new data timeout */
  309. #define    C_IN_MDCD    0x00000100    /* modem DCD change */
  310. #define    C_IN_MDSR    0x00000200    /* modem DSR change */
  311. #define    C_IN_MRI    0x00000400    /* modem RI change */
  312. #define    C_IN_MCTS    0x00000800    /* modem CTS change */
  313. #define    C_IN_RXBRK    0x00001000    /* Break received */
  314. #define    C_IN_PR_ERROR    0x00002000    /* parity error */
  315. #define    C_IN_FR_ERROR    0x00004000    /* frame error */
  316. #define C_IN_OVR_ERROR  0x00008000      /* overrun error */
  317. #define C_IN_RXOFL    0x00010000      /* RX buffer overflow */
  318. #define C_IN_IOCTLW    0x00020000      /* I/O control w/ wait */
  319. #define C_IN_MRTS    0x00040000    /* modem RTS drop */
  320.  
  321. /* flow control */
  322.  
  323. #define    C_FL_OXX    0x00000001    /* output Xon/Xoff flow control */
  324. #define    C_FL_IXX    0x00000002    /* output Xon/Xoff flow control */
  325. #define C_FL_OIXANY    0x00000004    /* output Xon/Xoff (any xon) */
  326. #define    C_FL_SWFLOW    0x0000000f
  327.  
  328. /* flow status */
  329.  
  330. #define    C_FS_TXIDLE    0x00000000    /* no Tx data in the buffer or UART */
  331. #define    C_FS_SENDING    0x00000001    /* UART is sending data */
  332. #define    C_FS_SWFLOW    0x00000002    /* Tx is stopped by received Xoff */
  333.  
  334. /* rs_control/rs_status RS-232 signals */
  335.  
  336. #define C_RS_PARAM    0x80000000    /* Indicates presence of parameter in 
  337.                        IOCTLM command */
  338. #define    C_RS_RTS    0x00000001    /* RTS */
  339. #define    C_RS_DTR    0x00000004    /* DTR */
  340. #define    C_RS_DCD    0x00000100    /* CD */
  341. #define    C_RS_DSR    0x00000200    /* DSR */
  342. #define    C_RS_RI        0x00000400    /* RI */
  343. #define    C_RS_CTS    0x00000800    /* CTS */
  344.  
  345. /* commands Host <-> Board */
  346.  
  347. #define    C_CM_RESET    0x01        /* reset/flush buffers */
  348. #define    C_CM_IOCTL    0x02        /* re-read CH_CTRL */
  349. #define    C_CM_IOCTLW    0x03        /* re-read CH_CTRL, intr when done */
  350. #define    C_CM_IOCTLM    0x04        /* RS-232 outputs change */
  351. #define    C_CM_SENDXOFF    0x10        /* send Xoff */
  352. #define    C_CM_SENDXON    0x11        /* send Xon */
  353. #define C_CM_CLFLOW    0x12        /* Clear flow control (resume) */
  354. #define    C_CM_SENDBRK    0x41        /* send break */
  355. #define    C_CM_INTBACK    0x42        /* Interrupt back */
  356. #define    C_CM_SET_BREAK    0x43        /* Tx break on */
  357. #define    C_CM_CLR_BREAK    0x44        /* Tx break off */
  358. #define    C_CM_CMD_DONE    0x45        /* Previous command done */
  359. #define C_CM_INTBACK2    0x46        /* Alternate Interrupt back */
  360. #define    C_CM_TINACT    0x51        /* set inactivity detection */
  361. #define    C_CM_IRQ_ENBL    0x52        /* enable generation of interrupts */
  362. #define    C_CM_IRQ_DSBL    0x53        /* disable generation of interrupts */
  363. #define    C_CM_ACK_ENBL    0x54        /* enable acknowledged interrupt mode */
  364. #define    C_CM_ACK_DSBL    0x55        /* disable acknowledged intr mode */
  365. #define    C_CM_FLUSH_RX    0x56        /* flushes Rx buffer */
  366. #define    C_CM_FLUSH_TX    0x57        /* flushes Tx buffer */
  367. #define C_CM_Q_ENABLE    0x58        /* enables queue access from the 
  368.                        driver */
  369. #define C_CM_Q_DISABLE  0x59            /* disables queue access from the 
  370.                        driver */
  371.  
  372. #define    C_CM_TXBEMPTY    0x60        /* Tx buffer is empty */
  373. #define    C_CM_TXLOWWM    0x61        /* Tx buffer low water mark */
  374. #define    C_CM_RXHIWM    0x62        /* Rx buffer high water mark */
  375. #define    C_CM_RXNNDT    0x63        /* rx no new data timeout */
  376. #define    C_CM_MDCD    0x70        /* modem DCD change */
  377. #define    C_CM_MDSR    0x71        /* modem DSR change */
  378. #define    C_CM_MRI    0x72        /* modem RI change */
  379. #define    C_CM_MCTS    0x73        /* modem CTS change */
  380. #define C_CM_MRTS    0x74        /* modem RTS drop */
  381. #define    C_CM_RXBRK    0x84        /* Break received */
  382. #define    C_CM_PR_ERROR    0x85        /* Parity error */
  383. #define    C_CM_FR_ERROR    0x86        /* Frame error */
  384. #define C_CM_OVR_ERROR  0x87            /* Overrun error */
  385. #define C_CM_RXOFL    0x88            /* RX buffer overflow */
  386. #define    C_CM_CMDERROR    0x90        /* command error */
  387. #define    C_CM_FATAL    0x91        /* fatal error */
  388. #define    C_CM_HW_RESET    0x92        /* reset board */
  389.  
  390. /*
  391.  *    CH_CTRL - This per port structure contains all parameters
  392.  *    that control an specific port. It can be seen as the
  393.  *    configuration registers of a "super-serial-controller".
  394.  */
  395.  
  396. struct CH_CTRL {
  397.     uclong    op_mode;    /* operation mode */
  398.     uclong    intr_enable;    /* interrupt masking */
  399.     uclong    sw_flow;    /* SW flow control */
  400.     uclong    flow_status;    /* output flow status */
  401.     uclong    comm_baud;    /* baud rate  - numerically specified */
  402.     uclong    comm_parity;    /* parity */
  403.     uclong    comm_data_l;    /* data length/stop */
  404.     uclong    comm_flags;    /* other flags */
  405.     uclong    hw_flow;    /* HW flow control */
  406.     uclong    rs_control;    /* RS-232 outputs */
  407.     uclong    rs_status;    /* RS-232 inputs */
  408.     uclong    flow_xon;    /* xon char */
  409.     uclong    flow_xoff;    /* xoff char */
  410.     uclong    hw_overflow;    /* hw overflow counter */
  411.     uclong    sw_overflow;    /* sw overflow counter */
  412.     uclong    comm_error;    /* frame/parity error counter */
  413. };
  414.  
  415.  
  416. /*
  417.  *    BUF_CTRL - This per channel structure contains
  418.  *    all Tx and Rx buffer control for a given channel.
  419.  */
  420.  
  421. struct    BUF_CTRL    {
  422.     uclong    flag_dma;    /* buffers are in Host memory */
  423.     uclong    tx_bufaddr;    /* address of the tx buffer */
  424.     uclong    tx_bufsize;    /* tx buffer size */
  425.     uclong    tx_threshold;    /* tx low water mark */
  426.     uclong    tx_get;        /* tail index tx buf */
  427.     uclong    tx_put;        /* head index tx buf */
  428.     uclong    rx_bufaddr;    /* address of the rx buffer */
  429.     uclong    rx_bufsize;    /* rx buffer size */
  430.     uclong    rx_threshold;    /* rx high water mark */
  431.     uclong    rx_get;        /* tail index rx buf */
  432.     uclong    rx_put;        /* head index rx buf */
  433.     uclong    filler[5];    /* filler to align structures */
  434. };
  435.  
  436. /*
  437.  *    BOARD_CTRL - This per board structure contains all global 
  438.  *    control fields related to the board.
  439.  */
  440.  
  441. struct BOARD_CTRL {
  442.  
  443.     /* static info provided by the on-board CPU */
  444.     uclong    n_channel;    /* number of channels */
  445.     uclong    fw_version;    /* firmware version */
  446.  
  447.     /* static info provided by the driver */
  448.     uclong    op_system;    /* op_system id */
  449.     uclong    dr_version;    /* driver version */
  450.  
  451.     /* board control area */
  452.     uclong    inactivity;    /* inactivity control */
  453.  
  454.     /* host to FW commands */
  455.     uclong    hcmd_channel;    /* channel number */
  456.     uclong    hcmd_param;    /* pointer to parameters */
  457.  
  458.     /* FW to Host commands */
  459.     uclong    fwcmd_channel;    /* channel number */
  460.     uclong    fwcmd_param;    /* pointer to parameters */
  461.     uclong    zf_int_queue_addr; /* offset for INT_QUEUE structure */
  462.  
  463.     /* filler so the structures are aligned */
  464.     uclong    filler[6];
  465. };
  466.  
  467. /* Host Interrupt Queue */
  468.  
  469. #define QUEUE_SIZE    (10*MAX_CHAN)
  470.  
  471. struct    INT_QUEUE {
  472.     unsigned char    intr_code[QUEUE_SIZE];
  473.     unsigned long    channel[QUEUE_SIZE];
  474.     unsigned long    param[QUEUE_SIZE];
  475.     unsigned long    put;
  476.     unsigned long    get;
  477. };
  478.  
  479. /*
  480.  *    ZFW_CTRL - This is the data structure that includes all other
  481.  *    data structures used by the Firmware.
  482.  */
  483.  
  484. struct ZFW_CTRL {
  485.     struct BOARD_CTRL    board_ctrl;
  486.     struct CH_CTRL        ch_ctrl[MAX_CHAN];
  487.     struct BUF_CTRL        buf_ctrl[MAX_CHAN];
  488. };
  489.  
  490. /****************** ****************** *******************/
  491. #endif
  492.  
  493.  
  494.  
  495.  
  496. #ifdef __KERNEL__
  497.  
  498. /***************************************
  499.  * Memory access functions/macros      *
  500.  * (required to support Alpha systems) *
  501.  ***************************************/
  502.  
  503. #define cy_writeb(port,val)     {writeb((ucchar)(val),(ulong)(port)); mb();}
  504. #define cy_writew(port,val)     {writew((ushort)(val),(ulong)(port)); mb();}
  505. #define cy_writel(port,val)     {writel((uclong)(val),(ulong)(port)); mb();}
  506.  
  507. #define cy_readb(port)  readb(port)
  508. #define cy_readw(port)  readw(port)
  509. #define cy_readl(port)  readl(port)
  510.  
  511. /* Per card data structure */
  512.  
  513. struct cyclades_card {
  514.     long base_addr;
  515.     long ctl_addr;
  516.     int irq;
  517.     int num_chips;    /* 0 if card absent, -1 if Z/PCI, else Y */
  518.     int first_line;    /* minor number of first channel on card */
  519.     int bus_index;    /* address shift - 0 for ISA, 1 for PCI */
  520.     int    inact_ctrl;    /* FW Inactivity control - 0 disabled, 1 enabled */
  521. };
  522.  
  523. struct cyclades_chip {
  524.   int filler;
  525. };
  526.  
  527. /*
  528.  * This is our internal structure for each serial port's state.
  529.  * 
  530.  * Many fields are paralleled by the structure used by the serial_struct
  531.  * structure.
  532.  *
  533.  * For definitions of the flags field, see tty.h
  534.  */
  535.  
  536. struct cyclades_port {
  537.     int                     magic;
  538.     int            card;
  539.     int            line;
  540.     int            flags;         /* defined in tty.h */
  541.     int                     type;        /* UART type */
  542.     struct tty_struct     *tty;
  543.     int            read_status_mask;
  544.     int            ignore_status_mask;
  545.     int            timeout;
  546.     int            xmit_fifo_size;
  547.     int                     cor1,cor2,cor3,cor4,cor5;
  548.     int                     tbpr,tco,rbpr,rco;
  549.     int            baud;
  550.     int            rflow;
  551.     int            rtsdtr_inv;
  552.     int            chip_rev;
  553.     int            custom_divisor;
  554.     int                     x_char; /* to be pushed out ASAP */
  555.     int            close_delay;
  556.     unsigned short        closing_wait;
  557.     unsigned long        event;
  558.     unsigned long        last_active;
  559.     int            count;    /* # of fd on device */
  560.     int                     x_break;
  561.     int            blocked_open; /* # of blocked opens */
  562.     long            session; /* Session of opening process */
  563.     long            pgrp; /* pgrp of opening process */
  564.     unsigned char         *xmit_buf;
  565.     int            xmit_head;
  566.     int            xmit_tail;
  567.     int            xmit_cnt;
  568.         int                     default_threshold;
  569.         int                     default_timeout;
  570.     struct tq_struct    tqueue;
  571.     struct termios        normal_termios;
  572.     struct termios        callout_termios;
  573.     struct wait_queue    *open_wait;
  574.     struct wait_queue    *close_wait;
  575.     struct wait_queue    *shutdown_wait;
  576.         struct cyclades_monitor mon;
  577.     unsigned long        jiffies[3];
  578.     unsigned long        rflush_count;
  579.     struct cyclades_idle_stats   idle_stats;
  580. };
  581.  
  582. /*
  583.  * Events are used to schedule things to happen at timer-interrupt
  584.  * time, instead of at cy interrupt time.
  585.  */
  586. #define Cy_EVENT_READ_PROCESS        0
  587. #define Cy_EVENT_WRITE_WAKEUP        1
  588. #define Cy_EVENT_HANGUP            2
  589. #define Cy_EVENT_BREAK            3
  590. #define Cy_EVENT_OPEN_WAKEUP        4
  591. #define Cy_EVENT_SHUTDOWN_WAKEUP    5
  592.  
  593. #define    CLOSING_WAIT_DELAY    30*HZ
  594. #define CY_CLOSING_WAIT_NONE    65535
  595. #define CY_CLOSING_WAIT_INF    0
  596.  
  597.  
  598. #define CyMAX_CHIPS_PER_CARD    8
  599. #define CyMAX_CHAR_FIFO        12
  600. #define CyPORTS_PER_CHIP    4
  601. #define    CD1400_MAX_SPEED    115200
  602.  
  603. #define    CyISA_Ywin    0x2000
  604.  
  605. #define CyPCI_Ywin     0x4000
  606. #define CyPCI_Yctl     0x80
  607. #define CyPCI_Zctl     CTRL_WINDOW_SIZE
  608. #define CyPCI_Zwin     0x80000
  609. #define CyPCI_Ze_win     (2 * CyPCI_Zwin)
  610.  
  611. #define PCI_DEVICE_ID_MASK    0x06
  612.  
  613. /**** CD1400 registers ****/
  614.  
  615. #define CD1400_REV_G    0x46
  616. #define CD1400_REV_J    0x48
  617.  
  618. #define CyRegSize      0x0400
  619. #define Cy_HwReset     0x1400
  620. #define Cy_ClrIntr     0x1800
  621. #define Cy_EpldRev     0x1e00
  622.  
  623. /* Global Registers */
  624.  
  625. #define CyGFRCR        (0x40*2)
  626. #define      CyRevE        (44)
  627. #define CyCAR        (0x68*2)
  628. #define      CyCHAN_0        (0x00)
  629. #define      CyCHAN_1        (0x01)
  630. #define      CyCHAN_2        (0x02)
  631. #define      CyCHAN_3        (0x03)
  632. #define CyGCR        (0x4B*2)
  633. #define      CyCH0_SERIAL    (0x00)
  634. #define      CyCH0_PARALLEL    (0x80)
  635. #define CySVRR        (0x67*2)
  636. #define      CySRModem        (0x04)
  637. #define      CySRTransmit    (0x02)
  638. #define      CySRReceive    (0x01)
  639. #define CyRICR        (0x44*2)
  640. #define CyTICR        (0x45*2)
  641. #define CyMICR        (0x46*2)
  642. #define      CyICR0        (0x00)
  643. #define      CyICR1        (0x01)
  644. #define      CyICR2        (0x02)
  645. #define      CyICR3        (0x03)
  646. #define CyRIR        (0x6B*2)
  647. #define CyTIR        (0x6A*2)
  648. #define CyMIR        (0x69*2)
  649. #define      CyIRDirEq        (0x80)
  650. #define      CyIRBusy        (0x40)
  651. #define      CyIRUnfair        (0x20)
  652. #define      CyIRContext    (0x1C)
  653. #define      CyIRChannel    (0x03)
  654. #define CyPPR         (0x7E*2)
  655. #define      CyCLOCK_20_1MS    (0x27)
  656. #define      CyCLOCK_25_1MS    (0x31)
  657. #define      CyCLOCK_25_5MS    (0xf4)
  658. #define      CyCLOCK_60_1MS    (0x75)
  659. #define      CyCLOCK_60_2MS    (0xea)
  660.  
  661. /* Virtual Registers */
  662.  
  663. #define CyRIVR        (0x43*2)
  664. #define CyTIVR        (0x42*2)
  665. #define CyMIVR        (0x41*2)
  666. #define      CyIVRMask (0x07)
  667. #define      CyIVRRxEx (0x07)
  668. #define      CyIVRRxOK (0x03)
  669. #define      CyIVRTxOK (0x02)
  670. #define      CyIVRMdmOK (0x01)
  671. #define CyTDR        (0x63*2)
  672. #define CyRDSR        (0x62*2)
  673. #define      CyTIMEOUT        (0x80)
  674. #define      CySPECHAR        (0x70)
  675. #define      CyBREAK        (0x08)
  676. #define      CyPARITY        (0x04)
  677. #define      CyFRAME        (0x02)
  678. #define      CyOVERRUN        (0x01)
  679. #define CyMISR        (0x4C*2)
  680. /* see CyMCOR_ and CyMSVR_ for bits*/
  681. #define CyEOSRR        (0x60*2)
  682.  
  683. /* Channel Registers */
  684.  
  685. #define CyLIVR        (0x18*2)
  686. #define      CyMscsr        (0x01)
  687. #define      CyTdsr        (0x02)
  688. #define      CyRgdsr        (0x03)
  689. #define      CyRedsr        (0x07)
  690. #define CyCCR        (0x05*2)
  691. /* Format 1 */
  692. #define      CyCHAN_RESET    (0x80)
  693. #define      CyCHIP_RESET    (0x81)
  694. #define      CyFlushTransFIFO    (0x82)
  695. /* Format 2 */
  696. #define      CyCOR_CHANGE    (0x40)
  697. #define      CyCOR1ch        (0x02)
  698. #define      CyCOR2ch        (0x04)
  699. #define      CyCOR3ch        (0x08)
  700. /* Format 3 */
  701. #define      CySEND_SPEC_1    (0x21)
  702. #define      CySEND_SPEC_2    (0x22)
  703. #define      CySEND_SPEC_3    (0x23)
  704. #define      CySEND_SPEC_4    (0x24)
  705. /* Format 4 */
  706. #define      CyCHAN_CTL        (0x10)
  707. #define      CyDIS_RCVR        (0x01)
  708. #define      CyENB_RCVR        (0x02)
  709. #define      CyDIS_XMTR        (0x04)
  710. #define      CyENB_XMTR        (0x08)
  711. #define CySRER        (0x06*2)
  712. #define      CyMdmCh        (0x80)
  713. #define      CyRxData        (0x10)
  714. #define      CyTxRdy        (0x04)
  715. #define      CyTxMpty        (0x02)
  716. #define      CyNNDT        (0x01)
  717. #define CyCOR1        (0x08*2)
  718. #define      CyPARITY_NONE    (0x00)
  719. #define      CyPARITY_0        (0x20)
  720. #define      CyPARITY_1        (0xA0)
  721. #define      CyPARITY_E        (0x40)
  722. #define      CyPARITY_O        (0xC0)
  723. #define      Cy_1_STOP        (0x00)
  724. #define      Cy_1_5_STOP    (0x04)
  725. #define      Cy_2_STOP        (0x08)
  726. #define      Cy_5_BITS        (0x00)
  727. #define      Cy_6_BITS        (0x01)
  728. #define      Cy_7_BITS        (0x02)
  729. #define      Cy_8_BITS        (0x03)
  730. #define CyCOR2        (0x09*2)
  731. #define      CyIXM        (0x80)
  732. #define      CyTxIBE        (0x40)
  733. #define      CyETC        (0x20)
  734. #define      CyAUTO_TXFL    (0x60)
  735. #define      CyLLM        (0x10)
  736. #define      CyRLM        (0x08)
  737. #define      CyRtsAO        (0x04)
  738. #define      CyCtsAE        (0x02)
  739. #define      CyDsrAE        (0x01)
  740. #define CyCOR3        (0x0A*2)
  741. #define      CySPL_CH_DRANGE    (0x80)  /* special character detect range */
  742. #define      CySPL_CH_DET1    (0x40)  /* enable special character detection
  743.                                                                on SCHR4-SCHR3 */
  744. #define      CyFL_CTRL_TRNSP    (0x20)  /* Flow Control Transparency */
  745. #define      CySPL_CH_DET2    (0x10)  /* Enable special character detection
  746.                                                                on SCHR2-SCHR1 */
  747. #define      CyREC_FIFO        (0x0F)  /* Receive FIFO threshold */
  748. #define CyCOR4        (0x1E*2)
  749. #define CyCOR5        (0x1F*2)
  750. #define CyCCSR        (0x0B*2)
  751. #define      CyRxEN        (0x80)
  752. #define      CyRxFloff        (0x40)
  753. #define      CyRxFlon        (0x20)
  754. #define      CyTxEN        (0x08)
  755. #define      CyTxFloff        (0x04)
  756. #define      CyTxFlon        (0x02)
  757. #define CyRDCR        (0x0E*2)
  758. #define CySCHR1        (0x1A*2)
  759. #define CySCHR2     (0x1B*2)
  760. #define CySCHR3        (0x1C*2)
  761. #define CySCHR4        (0x1D*2)
  762. #define CySCRL        (0x22*2)
  763. #define CySCRH        (0x23*2)
  764. #define CyLNC        (0x24*2)
  765. #define CyMCOR1     (0x15*2)
  766. #define CyMCOR2        (0x16*2)
  767. #define CyRTPR        (0x21*2)
  768. #define CyMSVR1        (0x6C*2)
  769. #define CyMSVR2        (0x6D*2)
  770. #define      CyDSR        (0x80)
  771. #define      CyCTS        (0x40)
  772. #define      CyRI        (0x20)
  773. #define      CyDCD        (0x10)
  774. #define      CyDTR              (0x02)
  775. #define      CyRTS              (0x01)
  776. #define CyPVSR        (0x6F*2)
  777. #define CyRBPR        (0x78*2)
  778. #define CyRCOR        (0x7C*2)
  779. #define CyTBPR        (0x72*2)
  780. #define CyTCOR        (0x76*2)
  781.  
  782. /* Custom Registers */
  783.  
  784. #define    CyPLX_VER    (0x3400)
  785. #define    PLX_9050    0x0b
  786. #define    PLX_9060    0x0c
  787. #define    PLX_9080    0x0d
  788.  
  789. /***************************************************************************/
  790.  
  791. #endif /* __KERNEL__ */
  792. #endif /* _LINUX_CYCLADES_H */
  793.